﻿using System;
using System.Collections.Generic;
using SE6;
/// <summary>
/// IDAMSDataAccess 的摘要说明
/// 包括所有与数据访问层相关功能的接口声明
/// </summary>
public interface IDataAccess
{
	//--------for User manager-----------------
	//添加用户
	Boolean Insert(User user);
	//更新用户信息
	Boolean Update(User user);
	//删除ID为id的用户
	Boolean DeleteUser(Int32 id);
	//获取用户名为name的全部用户信息,若不存在该用户返回null
	User GetUser(String name);
	//获取用户名ID为id的全部用户信息,若不存在该用户返回null
	User GetUser(Int32 id);
	//获得用户名为name的用户ID，若不存在返回0
	Int32 GetUserID(String name);
	//获得用户总数
	Int32 GetUsersCount();
	//返回从第start开始的最多maxCount个用户的信息
	List<User> GetUsers(Int32 start, Int32 maxCount); 

//--------for Archive manager--------------
	//添加档案
	Boolean Insert(Archive ar);
	//更新档案信息，不包括档案内容本身！
	Boolean Update(Archive ar);
	//删除ID为ar.ID的档案
	Boolean DeleteArchive(Int32 id);
	//仅获取ID为id的档案档案内容、价值分，并在usrID的用户减去相应档案价值分
	Byte[] GetArchiveContent(Int32 id,Int32 usrID,Int32 point);
	//获得档案描述，不包括档案内容本身
	Archive GetArchiveDescription(Int32 id);
	//	1、获得指定用ID的所有档案目录及其相应档案数（用于：用户查看并管理自己的档案）
	List<ArchiveCategory> GetMyArchiveCategories( Int32 myID );
	//	2、对指定用ID以及档案分类category的所有档案以id排序，返回从第start开始的最多maxCount个档案
	List<Archive> GetMyArchives(
		Int32 myID,String category,Int32 start, Int32 maxCount);
	//3、检索与keyword有关（档案【标题】以及【描述】以及【分类】）的所有档案，且档案安全级别不大于maxLevel，
	//		，返回从第start开始的最多maxCount个档案，（不包括档案内容本身）
	// a.匿名用户搜索,maxLevel=ArchiveSeruityLevel.Public
	// b.普通注册用户搜索，maxLevel=ArchiveSeruityLevel.Share
	// c.管理员用户搜索（审核档案），maxLevel=ArchiveSeruityLevel.Safe
 	List<Archive> GetArchives(
        String keyword, ArchiveType type,ArchiveSecurityLevel maxLevel, Int32 start, Int32 maxCount);
	//返回与关键词匹配的档案数
	Int32 GetMatchedArchivesCount(
		String keyword, ArchiveType type, ArchiveSecurityLevel maxLevel);

    //对指定用ID的所有档案以id排序，返回从第start开始的最多maxCount个档案
    List<Archive> GetArchives(Int32 myID, ArchiveSecurityLevel maxLevel, Int32 start, Int32 maxCount);
    //返回myID所有的，最高等级不高于maxLevel的档案个数
    Int32 GetMatchedArchivesCount( Int32 myID, ArchiveSecurityLevel maxLevel);


//--------for LeaveWord manager--------------
// 	//添加留言
// 	Boolean Insert(LeaveWord leaveWord);
// 	//更新留言信息
// 	Boolean Update(LeaveWord leaveWord);
// 	//删除ID为id的留言
// 	Boolean DeleteLeaveWord(Int32 id);
// 	//
// 	List<LeaveWord> GetLeaveWords(Int32 start,Int32 maxCount);
//--------for LeaveWord manager--------------
	//添加关键词
	Boolean Insert(HotWord hotWord);
	//删除关键词所有记录
	Boolean DeleteHotWord(String keyword);
	//取出最后访问时间在startTime后的所有词汇访问统计排名前topCount的关键词记录
	List<HotWord> GetHotWords(DateTime startTime, Int32 topCount);
//--------for System manager--------------
	SystemConfigure GetSystemConfigure();
	Boolean UpdateSystemConfigure(SystemConfigure cfg);
//--------for BBS------------------------------
	//添加主题
	Boolean Insert(Topic topic,Reply reply);
	//添加回复
	Boolean Insert(Reply reply);
	//删除ID为id的主题（包括所有回复）
	Boolean DeleteTopic(Int32 id);
	//删除ID为topicID的主题的replyID回复
	Boolean DeleteReply(Int32 topicID,Int32 replyID);
	//返回所有主题数目
	Int32 GetTopicsCount();
	//返回从第start开始的最多maxCount个主题
	List<Topic> GetTopics(Int32 start,Int32 maxCount);
	//返回所有与主题topicID相关的回复数目
	Int32 GetReplysCount(Int32 topicID);
	//对所有与主题topicID相关的回复，返回从第start开始的最多maxCount个回复
	List<Reply> GetReplys(Int32 topicID,Int32 start, Int32 maxCount);
	//更新主题
	Boolean UpdateTopic(Topic topic);
	//获得主题
	Topic GetTopic(Int32 id);
}
